package net.sansi.v3correctserver.util;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * Created by Fang
 * create time : 2024/11/5
 * IDE : IntelliJ IDEA
 * <p>
 * 排序工具类
 */

public class SortUtil<T> {
    // 元数列表
    private final List<T> list = new ArrayList<>();
    // 比较器
    private final Comparator<T> comparator;
    // 是否已经排序
    private boolean isSorted = false;

    /**
     * 构造函数
     *
     * @param comparator 比较器
     */
    public SortUtil(Comparator<T> comparator) {
        this.comparator = comparator;
    }

    /**
     * 添加一个元素
     *
     * @param item 元素
     */
    public void add(T item) {
        list.add(item);
        isSorted = false;
    }

    /**
     * 按照百分比排序读取
     *
     * @param percent 百分比
     * @param def     默认值
     * @return 元素
     */
    public T get(double percent, T def) {
        if (list.isEmpty()) return def;
        if (!isSorted) {
            list.sort(comparator);
            isSorted = true;
        }
        return list.get((int) Math.round((list.size() - 1) * percent));
    }

}
